const fs = require('fs');
const path = require('path');

// 创建打包脚本
function buildPackage() {
    console.log('🚀 开始打包项目...');
    
    // 创建打包目录
    const buildDir = 'dist';
    if (fs.existsSync(buildDir)) {
        fs.rmSync(buildDir, { recursive: true, force: true });
    }
    fs.mkdirSync(buildDir);
    
    // 需要复制的文件列表
    const filesToCopy = [
        'server.js',
        'config.js',
        'package.json',
        'env.example',
        'data.json',
        'communities.json',
        'system-config.json'
    ];
    
    // 需要复制的目录
    const dirsToCopy = [
        'public'
    ];
    
    // 复制文件
    filesToCopy.forEach(file => {
        if (fs.existsSync(file)) {
            fs.copyFileSync(file, path.join(buildDir, file));
            console.log(`✅ 复制文件: ${file}`);
        } else {
            console.log(`⚠️  文件不存在: ${file}`);
        }
    });
    
    // 复制目录
    dirsToCopy.forEach(dir => {
        if (fs.existsSync(dir)) {
            copyDir(dir, path.join(buildDir, dir));
            console.log(`✅ 复制目录: ${dir}`);
        } else {
            console.log(`⚠️  目录不存在: ${dir}`);
        }
    });
    
    // 创建部署说明
    const deployReadme = `# 扫码管理系统 - 部署包

## 快速部署

### 1. 安装依赖
\`\`\`bash
npm install
\`\`\`

### 2. 配置环境
复制环境变量文件并修改配置：
\`\`\`bash
cp env.example .env
\`\`\`

编辑 .env 文件，设置：
- TARGET_URL: 跳转链接
- BASE_URL: 服务器地址
- PORT: 端口号

### 3. 启动服务
\`\`\`bash
npm start
\`\`\`

### 4. 访问管理界面
打开浏览器访问：http://localhost:3000

## 生产环境部署

### 使用PM2启动
\`\`\`bash
npm install -g pm2
pm2 start server.js --name "qrcode-system"
pm2 save
pm2 startup
\`\`\`

### 使用Docker部署
\`\`\`bash
docker build -t qrcode-system .
docker run -d -p 3000:3000 --name qrcode-app qrcode-system
\`\`\`

## 注意事项
- 确保目标跳转链接可访问
- 定期备份data.json文件
- 生产环境建议配置SSL证书
- 扫码数据保存在本地JSON文件

## 文件说明
- server.js: 主服务器文件
- config.js: 配置文件
- data.json: 扫码记录数据
- communities.json: 地区数据
- system-config.json: 系统配置
- public/: 前端文件目录
`;
    
    fs.writeFileSync(path.join(buildDir, 'README.md'), deployReadme);
    console.log('✅ 创建部署说明: README.md');
    
    // 创建Dockerfile
    const dockerfile = `FROM node:18-alpine

WORKDIR /app

COPY package*.json ./
RUN npm install --production

COPY . .

EXPOSE 3000

CMD ["npm", "start"]
`;
    
    fs.writeFileSync(path.join(buildDir, 'Dockerfile'), dockerfile);
    console.log('✅ 创建Dockerfile');
    
    // 创建.dockerignore
    const dockerignore = `node_modules
npm-debug.log
.git
.gitignore
README.md
.env
dist
`;
    
    fs.writeFileSync(path.join(buildDir, '.dockerignore'), dockerignore);
    console.log('✅ 创建.dockerignore');
    
    console.log('\\n🎉 打包完成！');
    console.log(`📦 打包目录: ${buildDir}/`);
    console.log('\\n📋 部署步骤:');
    console.log('1. 将dist目录内容复制到服务器');
    console.log('2. 运行 npm install');
    console.log('3. 配置.env文件');
    console.log('4. 运行 npm start');
    console.log('\\n🐳 或使用Docker:');
    console.log('1. cd dist');
    console.log('2. docker build -t qrcode-system .');
    console.log('3. docker run -d -p 3000:3000 qrcode-system');
}

// 递归复制目录
function copyDir(src, dest) {
    if (!fs.existsSync(dest)) {
        fs.mkdirSync(dest, { recursive: true });
    }
    
    const files = fs.readdirSync(src);
    files.forEach(file => {
        const srcPath = path.join(src, file);
        const destPath = path.join(dest, file);
        
        if (fs.statSync(srcPath).isDirectory()) {
            copyDir(srcPath, destPath);
        } else {
            fs.copyFileSync(srcPath, destPath);
        }
    });
}

// 执行打包
buildPackage(); 